import { createI18n } from 'vue-i18n'
import pinia from '@/stores/index.ts'
import { useThemeStore } from '@/stores/themeStore'

/**
 * 说明：
 * 须在 pages 下新建文件夹（建议 `要国际化界面目录` 与 `i18n 目录` 相同，方便查找），
 * 1、/src/i18n/lang 下的 ts 为框架的国际化内容
 * 2、/src/i18n/pages 下的 ts 为各界面的国际化内容
 */
// element plus 自带国际化

import enLocale from 'element-plus/es/locale/lang/en'
import zhcnLocale from 'element-plus/es/locale/lang/zh-cn'
//
const messages: Record<string, any> = {}
const element: Record<string, any> = { en: enLocale, 'zh-cn': zhcnLocale }
const itemize: Record<string, any> = { en: [], 'zh-cn': [] }

/**
 * 引入modules
 */
const modules: Record<string, any> = import.meta.glob('./**/*.ts', {
    eager: true,
})
for (const path in modules) {
    const key = path.match(/(\S+)\/(\S+).ts/)
    if (itemize[key![2]]) itemize[key![2]].push(modules[path].default)
    else itemize[key![2]] = modules[path]
}

// 合并数组对象（非标准数组对象，数组中对象的每项 key、value 都不同）
function mergeArrObj(list: any, key: string) {
    let obj = {}
    list[key].forEach((i: any) => {
        obj = Object.assign({}, obj, i)
    })
    return obj
}

// 处理最终格式
for (const key in itemize) {
    messages[key] = {
        name: key,
        el: element[key].el,
        message: mergeArrObj(itemize, key),
    }
}
//主题配置
const themeStore = useThemeStore(pinia)
const themeConfig = themeStore.themeConfig

// 导出语言国际化
export const i18n = createI18n({
    legacy: false,
    silentTranslationWarn: true,
    missingWarn: false,
    silentFallbackWarn: true,
    fallbackWarn: false,
    locale: themeConfig.globalI18n,
    fallbackLocale: zhcnLocale.name,
    messages,
})
